<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/plantillas/plantilla-sistema.xhtml">
    
    <ui:define name="cabecera">
        
        <title>Usuarios</title>
        
    </ui:define>
    
    <ui:define name="contenido">
        <center>
            
            <!-- Tabla de usuarios -->
            <p:fieldset legend="Usuarios" style="width:950px">
                <h:form id="tablaUsuarioFrm">
                    <p:dataTable id="tablaUsuarioDtb"
                                 value="#{usuarioBean.listaUsuarios}"
                                 var="usuario" 
                                 rowKey="#{usuario.correousuario}"
                                 emptyMessage="No hay registros disponibles."
                                 paginator="true" 
                                 paginatorPosition="bottom" 
                                 rows="10">
                        
                        <p:column headerText="Nombre" 
                                  filterBy="#{usuario.nombre}" 
                                  sortBy="#{usuario.nombre}" 
                                  filterMatchMode="contains">
                            <h:outputText value="#{usuario.nombre}" />
                        </p:column>
                        
                        <p:column headerText="Correo" 
                                  filterBy="#{usuario.correousuario}" 
                                  sortBy="#{usuario.correousuario}" 
                                  filterMatchMode="contains">
                            <h:outputText value="#{usuario.correousuario}"/>
                        </p:column>
                        
                        <p:column headerText="Teléfono" 
                                  filterBy="#{usuario.telefono}" 
                                  sortBy="#{usuario.telefono}" 
                                  filterMatchMode="startWith">
                            <h:outputText value="#{usuario.telefono}"/>
                        </p:column>
                        
                        <p:column headerText="Jefe" 
                                  filterBy="#{usuario.jefe}" 
                                  sortBy="#{usuario.jefe}" 
                                  filterMatchMode="contains">
                            <h:outputText value="#{usuario.jefe}"/>
                        </p:column>
                        
                        <p:column headerText="Estado" 
                                  filterBy="#{usuario.estado}" 
                                  sortBy="#{usuario.estado}" 
                                  filterMatchMode="startWith">
                            <h:outputText value="#{usuario.estado}"/>
                        </p:column>
                        
                        <p:column  headerText="Roles">
                            <center>
                                <p:commandButton id="rolesBtn"
                                                 type="button"
                                                 icon="ui-icon-search"/>
                                <p:overlayPanel id="tablaRolOpn" 
                                                for="rolesBtn" 
                                                appendToBody="true" 
                                                dynamic="true" 
                                                showEvent="mouseup" 
                                                hideEvent="mouseup">
                                    <p:dataTable id="tablaRolDtb"
                                                 value="#{usuarioBean.obtenerRoles(usuario)}"
                                                 var="rol"
                                                 rowKey="#{rol.codigorol}"
                                                 emptyMessage="No hay registros disponibles."> 
                                                   
                                        <p:column headerText="Rol">
                                             <h:outputText value="#{rol.nombre}"/> 
                                        </p:column>
                                        
                                        <p:column headerText="Eliminar">  
                                            <p:commandButton title="Eliminar" 
                                                 icon="ui-icon-trash"
                                                 actionListener="#{usuarioBean.revocarRol(usuario,rol)}" 
                                                 update="@form"/>
                                        </p:column> 
                                        
                                    </p:dataTable>  
                                </p:overlayPanel>
                            </center>
                        </p:column>
                        
                        <p:column headerText="Actualizar">
                            <center>
                                <p:commandButton title="Actualizar"
                                                 icon="ui-icon-pencil"
                                                 actionListener="#{usuarioBean.prepararModificacion(usuario)}" 
                                                 update=":guardarUsuarioFrm:panelUsuario" 
                                                 oncomplete="guardarUsuarioWgt.show()">
                                    <f:setPropertyActionListener target="#{usuarioBean.operacionActual}" 
                                                                 value="ACTUALIZACION" />
                                </p:commandButton>
                            </center>
                        </p:column>
                        
                        <p:column headerText="Eliminar">
                            <center>
                                <p:commandButton title="Eliminar" 
                                                 icon="ui-icon-trash"
                                                 actionListener="#{usuarioBean.prepararEliminacion(usuario)}" 
                                                 update="@form" 
                                                 oncomplete="confirmacionWgt.show()">
                                    <f:setPropertyActionListener target="#{usuarioBean.operacionActual}" 
                                                                 value="ELIMINACION" />
                                </p:commandButton>
                            </center>
                        </p:column>
                        
                        <f:facet name="footer">
                               <p:commandButton value="Nuevo usuario" 
                                                actionListener="#{usuarioBean.prepararAdicion}" 
                                                update=":guardarUsuarioFrm:panelUsuario" 
                                                oncomplete="guardarUsuarioWgt.show()"
                                                style="float:right;">
                                   <f:setPropertyActionListener target="#{usuarioBean.operacionActual}" 
                                                                 value="INSERCION" />
                               </p:commandButton>
                        </f:facet>
                        
                    </p:dataTable>
                </h:form>
             </p:fieldset>
            
         </center>
    </ui:define>  
    
    <ui:define name="extra">
        
        <!-- Diálogo de inserción/modificación -->
        <p:dialog id="guardarUsuarioDlg" 
                  widgetVar="guardarUsuarioWgt"
                  header="Gestión de usuario"   
                  modal="true" 
                  resizable="false" 
                  width="500">
            <h:form id="guardarUsuarioFrm">
                <h:panelGrid id="panelUsuario" 
                             columns="3" 
                             style="margin-bottom:10px">

                    <h:outputLabel for="nombre" value="Nombre:" />
                    <h:inputText id="nombre" 
                                 value="#{usuarioBean.usuario.nombre}" 
                                 required="true" 
                                 title="Algo" />  
                    <p:panel style="border:none;">
                        <p:tooltip for="nombre" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:nombre')}">
                            <p:message id="nombreMsg" 
                                       for="nombre"
                                       display="text" />
                        </p:tooltip>
                    </p:panel>

                    <h:outputLabel for="correo" value="Correo:" 
                                   rendered="#{usuarioBean.operacionActual == 'INSERCION'}"/>
                    <h:inputText id="correo" 
                                 value="#{usuarioBean.usuario.correousuario}" 
                                 required="true"
                                 title="#{msgvld.correo}"
                                 rendered="#{usuarioBean.operacionActual == 'INSERCION'}"/>
                    <p:panel style="border:none;"
                             rendered="#{usuarioBean.operacionActual == 'INSERCION'}">
                        <p:tooltip for="correo" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{usuarioBean.operacionActual == 'INSERCION' and
                                               usuarioBean.tieneErrores('guardarUsuarioFrm:correo')}">
                            <p:message id="correoMsg" 
                                       for="correo"
                                       display="text" />
                        </p:tooltip>
                    </p:panel>
                    
                    <h:outputLabel for="telefono" value="Telefono:" />
                    <h:inputText id="telefono" 
                                 value="#{usuarioBean.usuario.telefono}"
                                 title="#{msgvld.telefono}"
                                 required="true"/>
                    <p:panel style="border:none;">
                        <p:tooltip for="telefono" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:telefono')}">
                            <p:message id="telefonoMsg" 
                                       for="telefono"
                                       display="text" />
                        </p:tooltip>
                    </p:panel>

                    <h:outputLabel for="jefe" value="Jefe:" />
                    <h:selectOneMenu id="jefe" 
                                     value="#{usuarioBean.usuario.jefe}"
                                     required="true"
                                     requiredMessage="#{msgvld.requerido}">
                        <f:selectItem itemLabel="Seleccione..." itemValue="" />
                        <f:selectItems value="#{usuarioBean.itemsTrabajadores}" />
                    </h:selectOneMenu>
                    <p:panel style="border:none;">
                        <p:tooltip for="jefe" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:jefe')}">
                            <p:message id="jefeMsg" 
                                       for="jefe"
                                       display="text" />
                        </p:tooltip>
                    </p:panel>

                    <h:outputLabel for="rol" value="Rol:" />
                    <p:selectCheckboxMenu id="rol" label="Roles" 
                                          value="#{usuarioBean.rolesUsuario}"
                                          required="true"
                                          requiredMessage="#{msgvld.requerido}"
                                          converter="rolConverter">  
                        <f:selectItems value="#{usuarioBean.listaRoles}" 
                                       var="rol"
                                       itemLabel="#{rol.nombre}"
                                       itemValue="#{rol}"/>  
                    </p:selectCheckboxMenu>
                    <p:panel style="border:none;">
                        <p:tooltip for="rol" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{usuarioBean.tieneErrores('guardarUsuarioFrm:rol')}">
                            <p:message id="rolMsg" 
                                       for="rol"
                                       display="text" />
                        </p:tooltip>
                    </p:panel>

                </h:panelGrid>
                
                <p:commandButton value="Guardar"
                                 actionListener="#{usuarioBean.guardarUsuario}"
                                 update="@form,:tablaUsuarioFrm:tablaUsuarioDtb" 
                                 oncomplete="if ( !args.validationFailed ) guardarUsuarioWgt.hide();" 
                                 style="float:right;" />
                
                <p:commandButton value="Cancelar"
                                 oncomplete="guardarUsuarioWgt.hide();" 
                                 style="float:right;">
                    <f:setPropertyActionListener target="#{usuarioBean.operacionActual}" 
                                                 value="NINGUNA" />
                </p:commandButton>
                
            </h:form>
        </p:dialog>
        
        <!-- Diálogo de confirmación de eliminación -->
        <p:confirmDialog id="confirmacionDlg" 
                         message="¿Está seguro que desea eliminar el registro?" 
                         header="Confirmación" 
                         widgetVar="confirmacionWgt" 
                         severity="alert"
                         width="300">
            
                    <p:commandButton value="Eliminar"
                                     actionListener="#{usuarioBean.eliminarUsuario}"
                                     update=":tablaUsuarioFrm:tablaUsuarioDtb"
                                     oncomplete="confirmacionWgt.hide()"
                                     style="float:right;"/>
                    
                    <p:commandButton value="Cancelar"
                                     oncomplete="confirmacionWgt.hide()" 
                                     style="float:right;">
                        <f:setPropertyActionListener target="#{usuarioBean.operacionActual}" 
                                                     value="NINGUNA" />
                    </p:commandButton>
                    
        </p:confirmDialog>
        
    </ui:define>
</ui:composition>

